/**
 * @file Sprite.h
 * Declaração da classe Sprite.
 */

#ifndef SPRITE_H_
#define SPRITE_H_

#include <string>
#include <SDL/SDL.h>


/**
 * Representa a imagem de um objeto, encapsulando a sua SDL_Surface.
 */
class Sprite {

public:

	/**
	 * Constrói uma sprite a partir de um arquivo de imagem.
	 */
	Sprite(const std::string& file, SDL_Rect* base);

	/**
	 * Libera a SDL_Surface da imagem.
	 */
	virtual ~Sprite();

	/**
	 * Renderiza a imagem na tela.
	 */
	void render(SDL_Surface* screen);

	/**
	 * Rotaciona o sprite para o ângulo desejado.
	 *
	 * @param angle O ângulo para o qual a sprite ficará virada.
	 */
	Sprite& rotate(double angle);

	/**
	 * Fornece o retângulo dessa sprite na tela.
	 */
	const SDL_Rect& getRect() const {
		return rect;
	}

	/**
	 * Informa o ângulo da sprite, caso queira evitar rotacioná-la de novo.
	 */
	double getAngle() const {
		return angle;
	}

protected:

	/**
	 * Retângulo com a posição do sprite na tela.
	 */
	SDL_Rect rect;

	/**
	 * Retângulo que calcula a posição em que o sprite será blitado, de acordo
	 * com o centro da tela.
	 */
	SDL_Rect* rectBase;

	/**
	 * O ângulo para o qual a sprite está virada.
	 */
	double angle;

	/**
	 * Surface da imagem que será blitada.
	 */
	SDL_Surface* surf;

	/**
	 * Surface que servirá de base para a rotação.
	 */
	SDL_Surface* surfBase;

};


#endif /* SPRITE_H_ */
